package week2

/*
Question
1. 我们在数据库操作的时候，比如 dao 层中当遇到一个 sql.ErrNoRows 的时候，是否应该 Wrap 这个 error，抛给上层。
为什么，应该怎么做请写出代码？
*/

/*
是需要 Wrap 这个 error ,并继续往上抛,抛到顶层调用者或有能力处理该 error 的方法中;代码如下,


main.go -> main() -> Controller()

*/
import (
	"errors"
	"fmt"
	xerr "github.com/pkg/errors"
)

var ErrNoRows = errors.New("sql: no rows in result set")
func Controller(){
	_ , err := Model()
	if err != nil && errors.Is(err, ErrNoRows) {
		//not found data rows
		fmt.Printf("%+v\n", err)
	}
}

func Model() ([]byte,error){
	res , err := Dao()
	if err != nil{
		return res, xerr.Wrap(err, "fetch model failed")
	}
	return res, nil
}

func Dao() ([]byte, error) {
	return nil, xerr.Wrap(ErrNoRows, "fetch dao failed")
}